JWT를 Base64 로 인코딩하는 이유
JWT를 사용할 때 항상 인코딩/디코딩 과정을 거친다.
JWT는 session과 달리 서버에서 인가정보를 유지하기 않으면서 서버의 부하를 줄여주기 위해 사용되는데, 왜 인코딩을 추가로 수행해줘서 서버가 할 일을 만든지 궁금해졌다.
그래서 왜 JWT는 Base64를 사용하는지 찾아보았다.
그 이유에 대한 공식적으로 명확한 이유는 찾지 못했지만, 찾아본 내용을 바탕으로 정리해보았다.
챗선생님과 관련글을 찾아봤다.
Chat 선생님 jwt가 Base64를 사용하는 이유가 뭔가요
JWT (JSON Web Tokens)는 Base64 인코딩을 사용하는 이유가 다음과 같습니다:
- 텍스트 기반 데이터 형식: JWT는 JSON 포맷을 사용하여 데이터를 표현합니다. JSON은 텍스트 데이터이므로 이를 이진 데이터와 함께 사용하려면 텍스트로 변환해야 합니다. Base64 인코딩은 바이너리 데이터를 텍스트로 표현하는 간단하고 효율적인 방법을 제공합니다.
- URL 안전성: JWT를 포함한 데이터는 URL에 안전하게 포함되어야 하는 경우가 많습니다. Base64 인코딩된 데이터는 URL에서 안전하게 전송 및 표현할 수 있도록 '+' 및 '/' 문자를 대체하고, 패딩 문자 '='를 다른 문자로 대체할 수 있습니다.
- 플랫폼 호환성: JWT는 플랫폼 간 데이터 교환을 지원하는 표준입니다. 다양한 프로그래밍 언어 및 플랫폼에서 JWT 라이브러리를 사용하여 JWT를 생성 및 구문 분석할 수 있으며, Base64 인코딩을 사용하면 데이터를 텍스트 형식으로 표현할 수 있어 이러한 플랫폼 간 호환성을 제공합니다.
- 간결성: Base64 인코딩을 사용하면 이진 데이터를 표현하는 데 사용되는 문자의 수가 줄어듭니다. 따라서 JWT의 크기가 상대적으로 작아지며, 데이터 전송 및 저장에 효율적으로 사용될 수 있습니다.
- 무결성 검사 및 보안: Base64 인코딩된 JWT에 대한 디코딩 및 검증은 비교적 쉽습니다. 따라서 JWT의 무결성을 검사하거나 데이터가 변경되었는지 감지할 수 있습니다.
요약하면, JWT가 Base64 인코딩을 사용하는 주된 이유는 데이터를 텍스트로 변환하고 다양한 환경에서 안전하게 사용할 수 있도록 하는 데 있습니다. 이는 JWT가 웹 토큰 및 인증 및 권한 부여를 위한 표준 방식으로 사용되는 이유 중 하나입니다.
(stack overflow)Why Base64 is used in JWTs?
우선 JWT는 JSON 포맷을 사용해서 데이터를 표현한다. JSON은 텍스트 데이터이다.
웹에 접근할 수 있는 시스템의 종류는 매우 다양하기 때문에 모든 시스템에서 동일한 값으로 인식하는 것을 보증해야 한다.
또한 URL에서 안전하게 포함될 수 있어야한다.
그래서 base64이다.
Base64#사용하는 이유
이러한 Base64 장점 이외도 가장 유명하고 간편하기 때문에 base64를 사용한다.****
Base64url
정확히 하자면 JWT에서 사용하는 Base64는 URL에서도 사용될 수 있게 URL-safe가 적용된 Base64url이다.